/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.deployment.servicoimpl;

import br.com.deployment.entidade.acesso.Usuario;
import br.com.deployment.entidade.fermojupi.AtoItem;
import br.com.deployment.entidade.fermojupi.EmolumentoItem;
import br.com.deployment.entidade.humana.Pessoa;
import br.com.deployment.entidade.protocolo.*;
import br.com.deployment.entidade.selo.Selo;
import br.com.deployment.entity.orcamento.Orcamento;
import br.com.deployment.entity.orcamento.OrcamentoAto;
import br.com.deployment.entity.orcamento.OrcamentoCampo;
import br.com.deployment.enums.Relatorio;
import br.com.deployment.enums.TipoRelatorioLancamento;
import br.com.deployment.interfaces.EmolumentoDaoIn;
import br.com.deployment.interfaces.ProtocoloDaoIn;
import br.com.deployment.servico.*;
import br.com.deployment.utilitario.*;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.net.URL;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.EJBException;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.faces.context.FacesContext;
import javax.persistence.NoResultException;

/**
 *
 * @author roniere
 */
@Stateless
@LocalBean
public class ProtocoloServicoImpl implements ProtocoloServico {

    @EJB
    AtoItemServico atoItemServico;
    @EJB
    ProtocoloDaoIn protocoloDao;
    @EJB
    OrcamentoServico orcamentoServico;
    @EJB
    EmolumentoDaoIn emolumentoDao;
    @EJB
    SeloServico seloDao;
    @EJB
    UsuarioServico usuarioDao;
    @EJB
    PessoaServico pessoaServico;
    @EJB
    CartorioServico cartorioServico;
    
    Usuario usr;

    @Override
    public Protocolo salvar(Protocolo p) {
        p.setDataCad(new Date());
        p.setValorTotalCartorio(valorCartorio(p));
        p.setValorTotalFermojupi(valorFermojupi(p));

        if (!p.getServicoProtocolos().isEmpty()) {
            
            for (ServicoProtocolo sp : p.getServicoProtocolos()) {
                sp.setProtocolo(p);
            }
            p.setId(protocoloDao.salvar(p));
            
        } else {
            Msg.messagemError("Impossivel criar Protocolo sem Serviços");
            return p;
        }
        
        Msg.messagemInfo("Protocolo Salvo com Sucesso !");
        return p;
    }

    private BigDecimal valorCartorio(Protocolo p) {
        BigDecimal bd = new BigDecimal("0");
        for (ServicoProtocolo sp : p.getServicoProtocolos()) {
            bd = bd.add(sp.getValorCartorio());
        }
        return bd;
    }

    private BigDecimal valorFermojupi(Protocolo p) {
        BigDecimal bd = new BigDecimal("0");
        for (ServicoProtocolo sp : p.getServicoProtocolos()) {
            bd = bd.add(sp.getValorFermojupi());
        }
        return bd;
    }

    @Override
    public Protocolo find(int id) {
        return protocoloDao.find(id);
    }

    @Override
    public List<Protocolo> findAll() {
        return protocoloDao.findAll();
    }

    @Override
    public void atualizar(Protocolo p) {
        for (ServicoProtocolo sp : p.getServicoProtocolos()) {
            for (Selo selo : sp.getSelos()) {
                selo.setProtocolado(true);
                selo.setDataProtocolado(new Date());
                seloDao.edit(selo);
            }
        }

        protocoloDao.update(p);

    }

    @Override
    public Protocolo orcamentoToProtocolo(Orcamento o) {
        Protocolo p = new Protocolo();
        ServicoProtocolo sp = new ServicoProtocolo();
        BigDecimal val = new BigDecimal(BigInteger.ZERO);
        List<ServicoProtocolo> list = new ArrayList<ServicoProtocolo>();
        List<ProtocoloCampo> listPc;
        
        p.setObs(o.getObservacao());
        for (OrcamentoAto oa : o.getOrcamentoAtos()) {
            System.err.println("Orcamento Ato: " + oa);
            
            sp = new ServicoProtocolo();
            sp.setAtoItem(oa.getAtoItem());
            sp.setValor(oa.getValor());
            
            List<BigDecimal> listValores = new ArrayList<BigDecimal>();

            listPc = new ArrayList<ProtocoloCampo>();

            if(!oa.getOrcamentoCampos().isEmpty()){
                
                for (OrcamentoCampo oc : oa.getOrcamentoCampos()) {

                    if(oc.getAtoCampo().getCalc()){
                        ProtocoloCampo pc = new ProtocoloCampo();
                        pc.setAtoCampo(oc.getAtoCampo());
                        pc.setValor(oc.getValor());
                        listPc.add(pc);
                        listValores = valorAtoProtocolo(sp.getAtoItem(), format(oc.getValor()));
                    }else if(oc.getAtoCampo().getMaster()){
                        ProtocoloCampo pc = new ProtocoloCampo();
                        pc.setAtoCampo(oc.getAtoCampo());
                        pc.setValor(oc.getValor());
                        listPc.add(pc);
                        listValores.add(format(oc.getValor()));
                        listValores.add(new BigDecimal(BigInteger.ZERO));
                        listValores.add(format(oc.getValor()));
                    }
                }
            }else{
                listValores = valorAtoProtocolo(sp.getAtoItem(), new BigDecimal(BigInteger.ZERO));
            }


            if (!listValores.isEmpty()) {
                sp.setValorCartorio(listValores.get(0) == null ? new BigDecimal(BigInteger.ZERO) : listValores.get(0));
                sp.setValorFermojupi(listValores.get(1) == null ? new BigDecimal(BigInteger.ZERO) : listValores.get(1));
                sp.setValor(listValores.get(2) == null ? new BigDecimal(BigInteger.ZERO) : listValores.get(2));
            }

            sp.setProtocoloCampos(listPc);

            list.add(sp);
            sp = new ServicoProtocolo();
        }

        p.setServicoProtocolos(list);

        Pessoa pessoa = orcamentoServico.findDoc(Caracteres.removecaracter(o.getDoc()));

        if (pessoa != null) {
            p.setCliente(pessoa);
        } else {
            p.setCliente(verificaPessoa(o.getNome(), o.getDoc()));
        }


        return p;
    }

    private BigDecimal format(OrcamentoCampo oc) {
        System.err.println("VALORRR OC" + oc.getValor());
        if (oc.getAtoCampo().getTipo().equalsIgnoreCase("Double") || oc.getAtoCampo().getTipo().equalsIgnoreCase("BigDecimal")) {

            if (oc.getAtoCampo().getCalc()) {
//                oc.setValor(oc.getValor().replace(".", "").replaceAll(",", "."));
                BigDecimal val = new BigDecimal(oc.getValor());
                System.err.println("VALORRR OC RETURN " + oc.getValor());
                return val;
            }
        }

        return null;
    }

    public Pessoa verificaPessoa(String nome, String doc) {
        doc = Caracteres.removecaracter(doc);
        Pessoa pe = new Pessoa();
        pe.setNome(nome);

        if (doc.length() == 11) {
            pe.setTipo(TipoPessoa.Fisica);
            pe.setCpf(doc);
            pe = pessoaServico.findDoc(pe.getCpf());
        } else if (doc.length() == 14) {
            pe.setTipo(TipoPessoa.Juridica);
            pe.setCnpj(doc);
            pe = pessoaServico.findDoc(pe.getCnpj());
        }



        return pe;
    }

    @Override
    public List<BigDecimal> valorAtoProtocolo(AtoItem ai, BigDecimal valor) {
        boolean pesquisar = true;
        List<BigDecimal> valores = new ArrayList<BigDecimal>();
        EmolumentoItem ei = new EmolumentoItem();


        pesquisar = emolumentoDao.verificaEmolumentoItemAto(ai);

        if (!pesquisar) {
            Msg.messagemWarn("Ato inexistente na tabela de Emolumento");
            throw new NumberFormatException();
        }

        try {
            
            ei = emolumentoDao.valorToAtoProtocolo(ai, valor);
            System.err.println("valores: " + ei);
            valores.add(new BigDecimal(ei.getCartorio().toString()));
            valores.add(new BigDecimal(ei.getFermojupi().toString()));
            valores.add(new BigDecimal(ei.getValor().toString()));

        } catch (EJBException x) {

            DecimalFormat df = new DecimalFormat("#,##0.00");
            String aux = String.valueOf(df.format(valor));

            Msg.messagemWarn("Valor " + aux + " relativo ao Ato: " + ai.getDescricao() + " inexiste na tabela de Emolumento.");
            throw new NoResultException();
        }
        return valores;

    }
    
   private BigDecimal format(String c) {

        c = c.replace(".", "").replaceAll(",", ".");
        BigDecimal val = new BigDecimal(c);
        return val;

    }

    public VOServicoProtocoloAtoCampo valorAtoProtocolo(ServicoProtocolo sp) {
        VOServicoProtocoloAtoCampo spac = new VOServicoProtocoloAtoCampo();
        List<BigDecimal> valorAto = new ArrayList<BigDecimal>();
        List<ProtocoloCampo> lstPc = sp.getProtocoloCampos();
        sp.setAtoItem(atoItemServico.find(sp.getAtoItem().getId()));
        
        if (sp.getAtoItem() != null) {
            if (!sp.getProtocoloCampos().isEmpty()) {
                
                for (ProtocoloCampo oc : sp.getProtocoloCampos()) {
                    System.err.println("Protocolo campo" + oc);
                    if (oc.getAtoCampo().getCalc()) {
                        valorAto = valorAtoProtocolo(sp.getAtoItem(), format(oc.getValor()));
                        oc.setServicoProtocolo(sp);
                        lstPc.add(oc);
                        break;
                    } else if (oc.getAtoCampo().getMaster()) {
                        valorAto.add(format(oc.getValor()));
                        valorAto.add(new BigDecimal(BigInteger.ZERO));
                        valorAto.add(format(oc.getValor()));
                        oc.setServicoProtocolo(sp);
                        lstPc.add(oc);
                        break;
                    }
                }
                System.err.println("Protocolo campos: " + sp.getProtocoloCampos());
                spac.setSp(sp);
                spac.setValorAto(valorAto);
                return spac;
            }else{
                valorAto = valorAtoProtocolo(sp.getAtoItem(), new BigDecimal("0.0"));
            }
        }else{
            Msg.messagemError("O campo 'Ato' é obrigatório");
            return null;
        }
        spac.setSp(sp);
        spac.setValorAto(valorAto);
        return spac;

    }

    @Override
    public List<Protocolo> buscar(Protocolo protocolo) {
        try {
            return protocoloDao.buscar(protocolo);
        } catch (Exception e) {
            Msg.messagemError("Erro ao buscar Protocolo.");
        }
        return null;
    }

    public List<ServicoProtocolo> servicoProtocolos(Protocolo protocolo) {
        return protocoloDao.servicoProtocolos(protocolo);
    }

    public List<Selo> sugerirSelo(AtoItem atoItem, List<Selo> selos) {
        getUsr();
        return seloDao.selosByUsuarioByAto(atoItem, usr, selos);
    }

    public void getUsr() {
        try {
            usr = usuarioDao.getUsuario();

        } catch (NullPointerException n) {
            Msg.messagemError("Favor Logar-se");
            return;

        }
    }

    @Override
    public List<ServicoProtocolo> tipoSeloProtocolo(Selo selo) {
        return protocoloDao.tipoSeloProtocolo(selo);
    }

    @Override
    public List<Protocolo> recentes() {
        System.err.println("rECENTES");
        return protocoloDao.recentes();
    }

    @Override
    public List<Protocolo> pendentes() {
        
        System.err.println("PENDENTES entro");
        List<Protocolo> list = new ArrayList<Protocolo>();
//        System.err.println("PENDENTES PAG");
//        list.addAll(protocoloDao.pendentesPagamento());
//        System.err.println("PENDENTES SELO");
//        
//        List<Protocolo> listPSelo = protocoloDao.pendentesSelo();
//        System.err.println("REMOVENDO SELO");
//        list.removeAll(listPSelo);
//        System.err.println("ADD SELO");
//        list.addAll(listPSelo);
        list = protocoloDao.pendentesSelo();
        return list;
    }

    @Override
    public List<Protocolo> pendentesSelo() {
        return protocoloDao.pendentesSelo();
    }

    @Override
    public List<Protocolo> pendentesPagamento() {
        return protocoloDao.pendentesPagamento();
    }

    @Override
    public List<Protocolo> finalizados() {
        
        return protocoloDao.finalizados();
    }

    @Override
    public Protocolo getProtocoloToSelar(int id) {
        return protocoloDao.getProtocoloToSelar(id);
    }

    public void cancelarSeloProtocolo(int id) {
        Protocolo p = find(id);
        List<ServicoProtocolo> lstSp = new ArrayList<ServicoProtocolo>();
        lstSp = p.getServicoProtocolos();

        for (ServicoProtocolo sp : lstSp) {
            for (Selo selo : sp.getSelos()) {
                selo.setProtocolado(false);
                selo.setDataProtocolado(null);
                seloDao.edit(selo);
            }
            sp.setSelos(null);
        }
        p.setServicoProtocolos(lstSp);
        protocoloDao.update(p);
    }

    @Override
    public boolean verificaPendenciaSelo(int p) {
        if (!protocoloDao.pendentesSelo(p).isEmpty()) {
            return true;
        }
        return false;
    }

    @Override
    public boolean verificaPendenciaPagamento(int p) {
        if (!protocoloDao.pendentesPagamento(p).isEmpty()) {
            return true;
        }
        return false;
    }

    @Override
    public List<Protocolo> relatorioTodosProtocolos(Date dataInicial, Date dataFinal) {
        
        return protocoloDao.relatorioTodos(dataInicial, dataFinal);
    }

    @Override
    public List<Protocolo> pendentesSelo(Date dataInicial, Date dataFinal) {
        return protocoloDao.pendentesSelo(dataInicial, dataFinal);
    }

    @Override
    public List<Protocolo> pendentesPagamento(Date dataInicial, Date dataFinal) {
        return protocoloDao.pendentesPagamento(dataInicial, dataFinal);
    }

    @Override
    public List<Protocolo> finalizados(Date dataInicial, Date dataFinal) {
        return protocoloDao.finalizados(dataInicial, dataFinal);
    }

    @Override
    public void gerarRelatorioProtocoloDate(TipoRelatorioLancamento tipo, Date dataInicial, Date dataFinal) {
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

        if (dataFinal == null) {
            dataFinal = new Date();
        }

        if (dataInicial.after(dataFinal)) {
            Msg.messagemError("Data Inicial deve ser maior que Data Final !");
            return;
        }


        if (tipo == TipoRelatorioLancamento.FINALIZADOS) {
            relatorioProtocoloDate(finalizados(dataInicial, dataFinal), tipo.getTexto() + " - De " + sdf.format(dataInicial) + " até " + sdf.format(dataFinal));
        }
        if (tipo == TipoRelatorioLancamento.PENDENTE_POR_PAGAMENTO) {
            relatorioProtocoloDate(pendentesPagamento(dataInicial, dataFinal), tipo.getTexto() + " - De " + sdf.format(dataInicial) + " até " + sdf.format(dataFinal));
        }
        if (tipo == TipoRelatorioLancamento.PENDENTE_POR_SELO) {
            relatorioProtocoloDate(pendentesSelo(dataInicial, dataFinal), tipo.getTexto() + " - De " + sdf.format(dataInicial) + " até " + sdf.format(dataFinal));
        }
        if (tipo == TipoRelatorioLancamento.TODOS) {
            relatorioProtocoloDate(relatorioTodosProtocolos(dataInicial, dataFinal), tipo.getTexto() + " - De " + sdf.format(dataInicial) + " até " + sdf.format(dataFinal));
        }



    }

    public void relatorioProtocoloDate(List<Protocolo> pro, String tipo) {

        
        
        GeraRelatorio geraRelatorio = new GeraRelatorio();

        HashMap<String, Object> parametros;
        parametros = new HashMap<String, Object>();
        parametros.put("tipo", tipo);
         
        URL subreport = Thread.currentThread().getContextClassLoader().getResource("br/com/deployment/relatorios/protocoloDate_subreport.jasper");
        parametros.put("SUBREPORT_DIR", subreport.toString().replace("protocoloDate_subreport.jasper" + "", ""));

        parametros = cartorioServico.getCartorioRelatorio(parametros);

        if (pro.isEmpty()) {
            pro = null;
        }
        geraRelatorio.relatorio(parametros, pro, Relatorio.RELATORIO_PROTOCOLO_DATE);
    }

    @Override
    public List<Protocolo> pesquisaPessoaProtocolo(Pessoa pessoa) {
        System.err.println("----> " + pessoa);
        RelatorioProtocoloPessoa relatorio = new RelatorioProtocoloPessoa();
        relatorio.setPessoa(pessoa);
        relatorio.setProtocolos(protocoloDao.pesquisaPessoaProtocolo(pessoa));

        List<RelatorioProtocoloPessoa> list = new ArrayList<RelatorioProtocoloPessoa>();
        list.add(relatorio);

        relatorioProtocoloPessoa(list, protocoloDao.pesquisaPessoaProtocolo(pessoa));

        return protocoloDao.pesquisaPessoaProtocolo(pessoa);
    }

    public void relatorioProtocoloPessoa(List<RelatorioProtocoloPessoa> pro, List<Protocolo> lst) {

        GeraRelatorio geraRelatorio = new GeraRelatorio();

        HashMap<String, Object> parametros;
        parametros = new HashMap<String, Object>();

        URL subreport = Thread.currentThread().getContextClassLoader().getResource("br/com/deployment/relatorios/protocoloPessoaSubReport.jasper");
        parametros.put("SUBREPORT_DIR", subreport.toString().replace("protocoloPessoaSubReport.jasper" + "", ""));


        parametros = cartorioServico.getCartorioRelatorio(parametros);

        if (pro.isEmpty()) {
            pro = null;
        }
        geraRelatorio.relatorio(parametros, pro, Relatorio.RELATORIO_PROTOCOLO_PESSOA);
    }

    @Override
    public void relatorioProtocolo(int id) {
        Protocolo pr = find(id);
        GeraRelatorio geraRelatorio = new GeraRelatorio();

        HashMap<String, Object> parametros;
        parametros = new HashMap<String, Object>();

        parametros.put("dataCad", pr.getDataCad());
        parametros.put("id", pr.getId());
        parametros.put("cliente", pr.getCliente().getNome());
        parametros.put("doc", pr.getCliente().getCpf() == null ? pr.getCliente().getCnpj() : pr.getCliente().getCpf());
        parametros.put("logradouro", pr.getCliente().getEndereco().getTipo_logradouro().toString() + " " + pr.getCliente().getEndereco().getLogradouro());
        parametros.put("bairro", pr.getCliente().getEndereco().getBairro());
        parametros.put("cidade", pr.getCliente().getEndereco().getCidade().getNom_cidade());
        parametros.put("numero", pr.getCliente().getEndereco().getNumero());
        parametros.put("telefone", pr.getCliente().getEndereco().getTelefone());
        parametros.put("celular", pr.getCliente().getEndereco().getCelular());
        parametros.put("pagamento", pr.getFormasPagamento().toString());
        parametros.put("valorTotalCartorio", pr.getValorTotalCartorio());
        parametros.put("valorTotalFermojupi", pr.getValorTotalFermojupi());
        parametros.put("obs", pr.getObs());

        URL subreport = Thread.currentThread().getContextClassLoader().getResource("br/com/deployment/relatorios/protocoloSubReport.jasper");
        parametros.put("SUBREPORT_DIR", subreport.toString().replace("protocoloSubReport.jasper" + "", ""));


        parametros = cartorioServico.getCartorioRelatorio(parametros);

        geraRelatorio.relatorio(parametros, pr.getServicoProtocolos(), Relatorio.RELATORIO_PROTOCOLO);

    }
    
     @Override
    public void relatorioProtocoloRecibo(int id) {
        Protocolo pr = find(id);
        GeraRelatorio geraRelatorio = new GeraRelatorio();

        HashMap<String, Object> parametros;
        parametros = new HashMap<String, Object>();

        parametros.put("dataCad", pr.getDataCad());
        parametros.put("id", pr.getId());
        parametros.put("cliente", pr.getCliente().getNome());
        parametros.put("doc", pr.getCliente().getCpf() == null ? pr.getCliente().getCnpj() : pr.getCliente().getCpf());
        parametros.put("logradouro", pr.getCliente().getEndereco().getTipo_logradouro().toString() + " " + pr.getCliente().getEndereco().getLogradouro());
        parametros.put("bairro", pr.getCliente().getEndereco().getBairro());
        parametros.put("cidade", pr.getCliente().getEndereco().getCidade().getNom_cidade());
        parametros.put("numero", pr.getCliente().getEndereco().getNumero());
        parametros.put("telefone", pr.getCliente().getEndereco().getTelefone());
        parametros.put("celular", pr.getCliente().getEndereco().getCelular());
        parametros.put("pagamento", pr.getFormasPagamento().toString());
        parametros.put("valorTotalCartorio", pr.getValorTotalCartorio());
        parametros.put("valorTotalFermojupi", pr.getValorTotalFermojupi());
        parametros.put("usuario", usuarioDao.getUsuario().getNome());
        parametros.put("cargo", usuarioDao.getUsuario().getCargo());
        parametros.put("obs", pr.getObs());


        parametros = cartorioServico.getCartorioRelatorio(parametros);

        geraRelatorio.relatorio(parametros, pr.getServicoProtocolos(), Relatorio.RELATORIO_PROTOCOLO_RECIBO);

    }

    @Override
    public List<ServicoProtocolo> relatorioSeloProtocolo(Date data, Date dataFinal) {
        return protocoloDao.relatorioSeloProtocolo(data, dataFinal);
    }

    @Override
    public void relatorioSeloProtocolo(List<ServicoProtocolo> pro) {

        GeraRelatorio geraRelatorio = new GeraRelatorio();

        HashMap<String, Object> parametros;
        parametros = new HashMap<String, Object>();

        URL subreport = Thread.currentThread().getContextClassLoader().getResource("br/com/deployment/relatorios/protocoloSeloSubReport.jasper");
        parametros.put("SUBREPORT_DIR", subreport.toString().replace("protocoloSeloSubReport.jasper" + "", ""));


        parametros = cartorioServico.getCartorioRelatorio(parametros);

        if (pro.isEmpty()) {
            pro = null;
        }
        geraRelatorio.relatorio(parametros, pro, Relatorio.RELATORIO_SELO_PROTOCOLO);
    }
      @Override
    public List<Protocolo> IntervaloSeloProtocolo(Selo selo, Integer num1, Integer num2) {
        return protocoloDao.IntervaloSeloProtocolo(selo, num1, num2);
    }
      
       @Override
    public List<Pagamento> pagamentosData(Date data) {
        return protocoloDao.pagamentosData(data);
    }

    @Override
    public List<Protocolo> protocolosData(Date data) {
        return protocoloDao.protocolosData(data);
    }
    
    @Override
    public BigDecimal caixaAreceber(Date dataInicial, Date dataFinal){
        BigDecimal valor = protocoloDao.caixaAreceber(dataInicial, dataFinal);
        if(valor == null){
            valor = new BigDecimal(BigInteger.ZERO);
        }
        return valor;
    }
    
    public BigDecimal caixaRecebido(Date dataInicial, Date dataFinal){
        return protocoloDao.caixaRecebido(dataInicial, dataFinal);
    }

    @Override
    public BigDecimal protocoloCaixaMes(Date dataini, Date datafim) {
        System.out.println("Protocolo Caixa Mês Total" ); 
        return protocoloDao.protocoloCaixaMes(dataini, datafim);
    }
    
    @Override
    public BigDecimal protocoloCaixaMesCartorio(Date dataini, Date datafim){
        System.out.println("Protocolo Caixa Mês Cartorio"); 
        return protocoloDao.protocoloCaixaMesCartorio(dataini, datafim);
    }
    
    @Override
    public BigDecimal protocoloCaixaMesFerm(Date dataini, Date datafim){
        System.out.println("Protocolo Caixa Mês Fermojupi"); 
        return protocoloDao.protocoloCaixaMesFerm(dataini, datafim);
    }

    @Override
    public List<Protocolo> pesquisarCaixaProtocolo(Date dataInicial, Date dataFinal) {
        return protocoloDao.pesquisarCaixaProtocolo(dataInicial, dataFinal);
    }

    @Override
    public List<Pagamento> pesquisarCaixaPagamento(Date dataInicial, Date dataFinal) {
        return protocoloDao.pesquisarCaixaPagamento(dataInicial, dataFinal);
    }
    
    @Override
    public BigDecimal protocoloCaixaMesBig(Date dataini, Date datafim){
        BigDecimal valor = protocoloDao.protocoloCaixaMesBig(dataini, datafim);
        if(valor == null){
            valor = new BigDecimal(BigInteger.ZERO);
        }
        return valor;
    }
    
  
       
}
